// pages/profile/profile.js
import { createStoreBindings } from 'mobx-miniprogram-bindings'
import { store } from '../../store/index'

import { http } from '../../utils/request'
import { showFeedbackToast } from '../../utils/show_toast'
Page({

  /**
   * 页面的初始数据
   */
  data: {
    userInfo: {}
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    if(typeof this.getTabBar === 'function' && this.getTabBar()) {
      this.getTabBar().setData({
        active: 3
      })
    }
    // 使用mobx
    this.storeBindings = createStoreBindings(this, {
      store,
      fields: ['bottomHeight', 'token', 'userInfo', 'redirectInfo'],
      actions: ['updateUserInfo', 'updateUserToken', 'updateAddress', 'updateRedirectInfo']
    })

    wx.nextTick(() => {
      this.setData({
        userInfo: this.data.userInfo
      })
    })
  },

  // 登录
  async login() {
    console.log('登录')
    let query = {}
    // 获取用户信息
    const wxInfoRes = await wx.getUserInfo()
    console.log('微信获取', wxInfoRes)
    this.updateUserInfo(wxInfoRes.userInfo)

    const wxLoginRes = await wx.login()
    console.log('微信登录', wxLoginRes)
  
    // 获取token
    query = {
      code: wxLoginRes.code,
      encryptedData: wxInfoRes.encryptedData,
      iv: wxInfoRes.iv,
      rawData: wxInfoRes.rawData,
      signature: wxInfoRes.signature
    }
    console.log('服务器登录参数', query)
    // 换取token  => 这个接口返回不了token 导致后面无法实现支付
    const { data: httpLoginRes } = await http.post('/users/wxlogin', query)
    console.log('服务器登录', httpLoginRes)
    // if(httpLoginRes.meta.status !== 200) return showFeedbackToast('登录失败!')
    showFeedbackToast('登录成功！', 'success')

    console.log(this.data.redirectInfo)
    // 判断是否由购物车转跳过来，登录成功后返回购物车页
    if(this.data.redirectInfo && this.data.redirectInfo.openType === 'switchTab') {
      wx.switchTab({
        url: this.data.redirectInfo.from,
        complete: () => {
          this.updateRedirectInfo({})
        }
      })
    }
  },
  
  // 退出登录
  logout() {
    this.updateUserInfo({})
    this.updateUserToken('')
    this.updateAddress({})
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 解绑
    this.storeBindings.destroyStoreBindings()
  }, 

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})
